home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / developer-tools / assembler-tools / apathysource / fastest / fastest.s < prev    next >
Encoding:
Text File  |  1980-01-30  |  20.8 KB  |  900 lines

  1. ;;; "Includes & Defines"
  2.            Machine   68020
  3.            Incdir    "!Includes:"
  4.            Include   "StdLibInc.i"
  5.            Include   "StdHardInc.i"
  6.  
  7.            Include   "Loader.i"
  8.            Include   "Support.i"
  9.            Include   "Demo.i"
  10.  
  11.            Incdir    "!Includes:os3.0/"
  12.            Include   "exec/memory.i"
  13.  
  14.            xdef      Fastest_Init
  15.            xdef      Fastest_Show
  16.            xdef      Fastest_Counter
  17.            xdef      Fastest_Main
  18.            xdef      Fastest_Remove
  19.  
  20.            xdef      Fastest_Angle
  21.            xdef      Fastest_Zoom
  22.            xdef      Fastest_XOff
  23.            xdef      Fastest_YOff
  24.  
  25. Fastest_ID         Equ       101
  26. SprCol             Equ       $000
  27. NoGrid             Equ       0
  28. Grey               Equ       1
  29. Dither             Equ       1
  30. MBlur              Equ       1
  31.  
  32. DIST               Equ       180
  33.  
  34.            IFEQ      Grey
  35.  
  36. _Farg0             Equ       $0
  37. _Farg1             Equ       $668
  38. _Farg2             Equ       $7b7
  39. _Farg3             Equ       $7a9
  40. _Farg4             Equ       $c65
  41. _Farg5             Equ       $a65
  42. _Farg6             Equ       $a68
  43. _Farg7             Equ       $b96
  44.  
  45. _Farg8             Equ       $aaa
  46. _Farg9             Equ       $aac
  47. _Farg10            Equ       $aca
  48. _Farg11            Equ       $acc
  49. _Farg12            Equ       $da8
  50. _Farg13            Equ       $dbc
  51. _Farg14            Equ       $dca
  52. _Farg15            Equ       $ffe
  53.  
  54. ;_Farg0             Equ       $0004
  55. ;_Farg1             Equ       $0015
  56. ;_Farg2             Equ       $0026
  57. ;_Farg3             Equ       $0137
  58. ;_Farg4             Equ       $0248
  59. ;_Farg5             Equ       $0359
  60. ;_Farg6             Equ       $046a
  61. ;_Farg7             Equ       $057b
  62.  
  63. ;_Farg8             Equ       $068c
  64. ;_Farg9             Equ       $079d
  65. ;_Farg10            Equ       $08ae
  66. ;_Farg11            Equ       $09bf
  67. ;_Farg12            Equ       $0acf
  68. ;_Farg13            Equ       $0bdf
  69. ;_Farg14            Equ       $0cef
  70. ;_Farg15            Equ       $0dff
  71.  
  72.            ELSE
  73.  
  74. _Farg0             Equ       $0000
  75. _Farg1             Equ       $0111
  76. _Farg2             Equ       $0222
  77. _Farg3             Equ       $0333
  78. _Farg4             Equ       $0444
  79. _Farg5             Equ       $0555
  80. _Farg6             Equ       $0666
  81. _Farg7             Equ       $0777
  82.  
  83. _Farg8             Equ       $0888
  84. _Farg9             Equ       $0999
  85. _Farg10            Equ       $0aaa
  86. _Farg11            Equ       $0bbb
  87. _Farg12            Equ       $0ccc
  88. _Farg13            Equ       $0ddd
  89. _Farg14            Equ       $0eee
  90. _Farg15            Equ       $0fff
  91.  
  92.            ENDC
  93.  
  94.            IFNE      NoGrid
  95. Farg0              Equ        _Farg4
  96. Farg1              Equ        _Farg4
  97. Farg2              Equ        _Farg4
  98. Farg3              Equ        _Farg4
  99. Farg4              Equ        _Farg6
  100. Farg5              Equ        _Farg6
  101. Farg6              Equ        _Farg6
  102. Farg7              Equ        _Farg6
  103.  
  104. Farg8              Equ        _Farg4
  105. Farg9              Equ        _Farg4
  106. Farg10             Equ        _Farg4
  107. Farg11             Equ        _Farg4
  108. Farg12             Equ        _Farg6
  109. Farg13             Equ        _Farg6
  110. Farg14             Equ        _Farg6
  111. Farg15             Equ        _Farg6
  112.  
  113.            ELSE
  114.  
  115. Farg0              Equ        SprCol
  116. Farg1              Equ        SprCol
  117. Farg2              Equ        SprCol
  118. Farg3              Equ        SprCol
  119. Farg4              Equ        SprCol
  120. Farg5              Equ        SprCol
  121. Farg6              Equ        SprCol
  122. Farg7              Equ        SprCol
  123.  
  124. Farg8              Equ        SprCol
  125. Farg9              Equ        SprCol
  126. Farg10             Equ        SprCol
  127. Farg11             Equ        SprCol
  128. Farg12             Equ        SprCol
  129. Farg13             Equ        SprCol
  130. Farg14             Equ        SprCol
  131. Farg15             Equ        SprCol
  132.  
  133.            ENDC
  134. ;;;
  135.  
  136. ***************************************
  137. *       Exempel/TestProgram...        *
  138. ***************************************
  139.  
  140.            Section   code,CODE
  141.  
  142.            IFND      noexample
  143. ;;; "                 Example"
  144. Start:             Jsr       _InitDemo
  145.            Tst.l     d0
  146.            Bne       Exit
  147.  
  148. PlayMusic:         Bsr       _PlayMusic
  149.            Tst.l     d0
  150.            Bne       Uninit
  151.  
  152.            Bsr       Fastest_Init
  153.            Tst.l     d0
  154.            Bne       StopMusic
  155.  
  156.            Bsr       Fastest_Show
  157.  
  158. Main:              Bsr       _Sync
  159.            Bsr       Fastest_Counter
  160.            Bsr       Fastest_Main
  161.  
  162.            Btst      #6,$bfe001
  163.            Bne       Main
  164. .waitlop           Btst      #6,$bfe001
  165.            Beq       .waitlop
  166.  
  167.            Bsr       Fastest_Remove
  168.  
  169. StopMusic:         Bsr       _StopMusic
  170. Uninit:            Bsr       _UninitDemo
  171. Exit:              Moveq     #0,d0
  172.            Rts
  173. ;;;
  174.            ENDC
  175.  
  176. ***************************************
  177. *       Subrutiner nedanför....       *
  178. ***************************************
  179.  
  180. Fastest_Init:
  181. ;;; "                 Alloc CopperList"
  182. AllocCopper:       Move.l    #10*1024,d0
  183.            Move.l    #Fastest_ID,d1
  184.            Jsr       _AllocChip
  185.            Tst.l     d0
  186.            Beq       InitError
  187.            Move.l    d0,CopperPtr
  188. ;;;
  189. ;;; "                 Init CopperList"
  190. InitCList:         Move.l    CopperPtr,a0
  191.  
  192.            Move.l    #$008e2c81,(a0)+     ; DIWSTRT
  193.            Move.l    #$00902cc1,(a0)+     ; DIWSTOP
  194.            Move.l    #$00920038,(a0)+     ; DDFSTRT
  195.            Move.l    #$009400d0,(a0)+     ; DDFSTOP
  196.            Move.l    #$01005201,(a0)+     ; BPLCON0
  197.            Move.l    #$01020010,(a0)+     ; BPLCON1
  198.            Move.l    #$01040024,(a0)+     ; BPLCON2
  199.            Move.l    #$01060020,(a0)+     ; BPLCON3 ($0020 = copborder)
  200.            Move.w    #$0108,(a0)+         ; BPLMOD1
  201.            Move.w    #-8,(a0)+
  202.            Move.w    #$010a,(a0)+         ; BPLMOD2
  203.            Move.w    #-8,(a0)+
  204.            Move.l    #$010c0022,(a0)+     ; Sprite palette = 31
  205.            Move.l    #$01fc000f,(a0)+     ; FETCHMODE
  206.  
  207.            ;-----------------------------------
  208.  
  209.            Move.l    a0,BplPtr
  210.            Move.l    #$00e00000,(a0)+     ; BPL1PTH
  211.            Move.l    #$00e20000,(a0)+     ; BPL1PTL
  212.            Move.l    #$00e40000,(a0)+     ; BPL1PTL
  213.            Move.l    #$00e60000,(a0)+     ; BPL1PTL
  214.            Move.l    #$00e80000,(a0)+     ; BPL1PTL
  215.            Move.l    #$00ea0000,(a0)+     ; BPL1PTL
  216.            Move.l    #$00ec0000,(a0)+     ; BPL1PTL
  217.            Move.l    #$00ee0000,(a0)+     ; BPL1PTL
  218.  
  219.            Move.l    #$00f00000,(a0)+     ; BPL1PTH
  220.            Move.l    #$00f20000,(a0)+     ; BPL1PTL
  221.            Move.l    #$00f40000,(a0)+     ; BPL1PTL
  222.            Move.l    #$00f60000,(a0)+     ; BPL1PTL
  223.            Move.l    #$00f80000,(a0)+     ; BPL1PTL
  224.            Move.l    #$00fa0000,(a0)+     ; BPL1PTL
  225.            Move.l    #$00fc0000,(a0)+     ; BPL1PTL
  226.            Move.l    #$00fe0000,(a0)+     ; BPL1PTL
  227.  
  228.            ;--------------------------------
  229.  
  230.            Move.l    a0,SprPtr
  231.            Move.l    #$01200000,(a0)+     ; SPRxPT
  232.            Move.l    #$01220000,(a0)+     ; SPRxPT
  233.            Move.l    #$01240000,(a0)+     ; SPRxPT
  234.            Move.l    #$01260000,(a0)+     ; SPRxPT
  235.            Move.l    #$01280000,(a0)+     ; SPRxPT
  236.            Move.l    #$012a0000,(a0)+     ; SPRxPT
  237.            Move.l    #$012c0000,(a0)+     ; SPRxPT
  238.            Move.l    #$012e0000,(a0)+     ; SPRxPT
  239.            Move.l    #$01300000,(a0)+     ; SPRxPT
  240.            Move.l    #$01320000,(a0)+     ; SPRxPT
  241.            Move.l    #$01340000,(a0)+     ; SPRxPT
  242.            Move.l    #$01360000,(a0)+     ; SPRxPT
  243.            Move.l    #$01380000,(a0)+     ; SPRxPT
  244.            Move.l    #$013a0000,(a0)+     ; SPRxPT
  245.            Move.l    #$013c0000,(a0)+     ; SPRxPT
  246.            Move.l    #$013e0000,(a0)+     ; SPRxPT
  247.  
  248.            ;--------------------
  249.  
  250.            Move.l    #$2c,d0
  251.            Move.l    #64+42-1,d7
  252.  
  253. .lop1              Move.l    d0,d1
  254.            Swap      d1
  255.            Lsl.l     #8,d1
  256.            Or.l      #$0001fffe,d1
  257.            Move.l    d1,(a0)+
  258.  
  259.            Move.w    #$0108,(a0)+
  260.            Move.w    #-48,(a0)+
  261.            Move.w    #$010a,(a0)+
  262.            Move.w    #-48,(a0)+
  263.            Move.l    #$01020010,(a0)+
  264.  
  265.            Move.l    d0,d1
  266.            Addq.l    #1,d1
  267.            Swap      d1
  268.            Lsl.l     #8,d1
  269.            Or.l      #$0001fffe,d1
  270.            Move.l    d1,(a0)+
  271.  
  272.            Move.w    #$0108,(a0)+
  273.            Move.w    #-8,(a0)+
  274.            Move.w    #$010a,(a0)+
  275.            Move.w    #-8,(a0)+
  276.            Move.l    #$01020021,(a0)+
  277.  
  278.            Addq.l    #2,d0
  279.            Dbra      d7,.lop1
  280.  
  281.            ;--------------------------
  282.  
  283.            Move.l    #$ffdffffe,(a0)+
  284.  
  285.            Move.l    #0,d0
  286.            Move.l    #22-1,d7
  287.  
  288. .lop2              Move.l    d0,d1
  289.            Swap      d1
  290.            Lsl.l     #8,d1
  291.            Or.l      #$0001fffe,d1
  292.            Move.l    d1,(a0)+
  293.  
  294.            Move.w    #$0108,(a0)+
  295.            Move.w    #-48,(a0)+
  296.            Move.w    #$010a,(a0)+
  297.            Move.w    #-48,(a0)+
  298.            Move.l    #$01020010,(a0)+
  299.  
  300.            Move.l    d0,d1
  301.            Addq.l    #1,d1
  302.            Swap      d1
  303.            Lsl.l     #8,d1
  304.            Or.l      #$0001fffe,d1
  305.            Move.l    d1,(a0)+
  306.  
  307.            Move.w    #$0108,(a0)+
  308.            Move.w    #-8,(a0)+
  309.            Move.w    #$010a,(a0)+
  310.            Move.w    #-8,(a0)+
  311.            Move.l    #$01020021,(a0)+
  312.  
  313.            Addq.l    #2,d0
  314.            Dbra      d7,.lop2
  315.  
  316.            Move.l     #$fffffffe,(a0)+     ; End of list
  317. ;;;
  318. ;;; "                 Init Screen"
  319. InitScreen:
  320.            Move.l    #40*128*5,d0
  321.            Move.l    #Fastest_ID,d1
  322.            Jsr       _AllocChip
  323.            Tst.l     d0
  324.            Beq       InitError
  325.            Move.l    d0,ScrPtr1
  326.            Add.l     #5120,d0
  327.            Move.l    d0,ScrPtr2
  328.            Add.l     #5120,d0
  329.            Move.l    d0,ViewPtr1
  330.            Add.l     #5120,d0
  331.            Move.l    d0,ViewPtr2
  332.            Add.l     #5120,d0
  333.            Move.l    d0,Plane5Ptr
  334.  
  335.            ;------------------------
  336.  
  337.            Move.l    BplPtr,a0
  338.            Move.l    ScrPtr1,d1
  339.            Moveq     #0,d2
  340.            Move.l    #0,d0
  341.            Jsr       _SetPtrs
  342.  
  343.            Move.l    BplPtr,a0
  344.            Lea       8(a0),a0
  345.            Move.l    ScrPtr1,d1
  346.            Moveq     #0,d2
  347.            Move.l    #0,d0
  348.            Jsr       _SetPtrs
  349.  
  350.            Move.l    BplPtr,a0
  351.            Lea       16(a0),a0
  352.            Move.l    ScrPtr2,d1
  353.            Moveq     #0,d2
  354.            Move.l    #0,d0
  355.            Jsr       _SetPtrs
  356.  
  357.            Move.l    BplPtr,a0
  358.            Lea       24(a0),a0
  359.            Move.l    ScrPtr2,d1
  360.            Moveq     #0,d2
  361.            Move.l    #0,d0
  362.            Jsr       _SetPtrs
  363.  
  364.            ;- - - - - - - - - - - - -
  365.  
  366.            Move.l    BplPtr,a0
  367.            Lea       32(a0),a0
  368.            Move.l    Plane5Ptr,d1
  369.            Moveq     #0,d2
  370.            Move.l    #0,d0
  371.            Jsr       _SetPtrs
  372.  
  373.            ;------------------------
  374.  
  375.            Move.l    SprPtr,a0
  376.            Move.l    #SpriteDummy,d1
  377.            Moveq     #7,d2
  378.            Moveq     #0,d0
  379.            Jsr       _SetPtrs
  380. ;;;
  381. ;;; "                 Fill Plane5"
  382. FillPlane5:        Move.l    #40*128/4-1,d0
  383.            Move.l    Plane5Ptr,a0
  384. .lop               Move.l    #%01010101010101010101010101010101,(a0)+
  385.            Dbra      d0,.lop
  386. ;;;
  387.  
  388. ;;; "                 Alloc TextureCopies"
  389. AllocTextures:     Move.l    #256*256*2,d0
  390.            Move.l    #Fastest_ID,d1
  391.            Jsr       _AllocPublic
  392.            Tst.l     d0
  393.            Beq       InitError
  394.            Move.l    d0,TexturePtr1
  395.  
  396.            Move.l    #256*256*2,d0
  397.            Move.l    #Fastest_ID,d1
  398.            Jsr       _AllocPublic
  399.            Tst.l     d0
  400.            Beq       InitError
  401.            Move.l    d0,TexturePtr2
  402. ;;;
  403. ;;; "                 Extract 4-bit Texture"
  404. Extract:           Lea       Texture,a0
  405.            Move.l    TexturePtr1,a1
  406.            Move.l    #256/2*128-1,d7
  407. .lop1
  408.            Move.b    (a0)+,d0
  409.            Move.b    d0,d1
  410.            And.l     #%11110000,d0
  411.            Lsr.l     #4,d0
  412.            And.l     #%00001111,d1
  413.  
  414.            Move.w    d0,(a1)+
  415.            Move.w    d1,(a1)+
  416.  
  417.            Dbra      d7,.lop1
  418. ;;;
  419. ;;; "                 Copy to second half"
  420. Duplicate:         Move.l    TexturePtr1,a0
  421.            Move.l    TexturePtr1,a1
  422.            Add.l     #256*256,a1
  423.  
  424.            Move.l    #256*256/4-1,d7
  425. .copylop1          Move.l    (a0)+,(a1)+
  426.            Dbra      d7,.copylop1
  427. ;;;
  428. ;;; "                 Roll texture 1"
  429. Copy2:             Move.l    TexturePtr1,a0
  430.  
  431.            Move.l    #256*256*2/4-1,d7
  432. .lop
  433.            Move.l    (a0),d0
  434.            Lsl.l     #8,d0
  435.            Move.l    d0,(a0)+
  436.  
  437.            Dbra      d7,.lop
  438. ;;;
  439. ;;; "                 Copy to texture 2"
  440. Copy4:             Move.l    TexturePtr1,a0
  441.            Move.l    TexturePtr2,a1
  442.  
  443.            Move.l    #256*256*2/4-1,d7
  444. .lop
  445.            Move.l    (a0)+,d0
  446.            Lsl.l     #4,d0
  447.            Move.l    d0,(a1)+
  448.  
  449.            Dbra      d7,.lop
  450. ;;;
  451.  
  452. ;;; "                 Rts"
  453.            Moveq     #0,d0
  454.            Rts
  455.  
  456. InitError:         Move.l    #Fastest_ID,d0
  457.            Bsr       _FreeMany
  458.            Moveq     #1,d0
  459.            Rts
  460. ;;;
  461.  
  462. Fastest_Show:
  463. ;;; "                 Init Colours"
  464. InitCols1:         Move.w    #$0020,$dff106
  465.  
  466.            Move.w    #Farg0,$dff180
  467.            Move.w    #Farg1,$dff182
  468.            Move.w    #Farg2,$dff184
  469.            Move.w    #Farg3,$dff186
  470.            Move.w    #Farg4,$dff188
  471.            Move.w    #Farg5,$dff18a
  472.            Move.w    #Farg6,$dff18c
  473.            Move.w    #Farg7,$dff18e
  474.            Move.w    #Farg8,$dff190
  475.            Move.w    #Farg9,$dff192
  476.            Move.w    #Farg10,$dff194
  477.            Move.w    #Farg11,$dff196
  478.            Move.w    #Farg12,$dff198
  479.            Move.w    #Farg13,$dff19a
  480.            Move.w    #Farg14,$dff19c
  481.            Move.w    #Farg15,$dff19e
  482.  
  483.            Move.w    #_Farg0,$dff1a0
  484.            Move.w    #_Farg1,$dff1a2
  485.            Move.w    #_Farg2,$dff1a4
  486.            Move.w    #_Farg3,$dff1a6
  487.            Move.w    #_Farg4,$dff1a8
  488.            Move.w    #_Farg5,$dff1aa
  489.            Move.w    #_Farg6,$dff1ac
  490.            Move.w    #_Farg7,$dff1ae
  491.            Move.w    #_Farg8,$dff1b0
  492.            Move.w    #_Farg9,$dff1b2
  493.            Move.w    #_Farg10,$dff1b4
  494.            Move.w    #_Farg11,$dff1b6
  495.            Move.w    #_Farg12,$dff1b8
  496.            Move.w    #_Farg13,$dff1ba
  497.            Move.w    #_Farg14,$dff1bc
  498.            Move.w    #_Farg15,$dff1be
  499.  
  500.            Move.w    #$2020,$dff106
  501.  
  502.            Move.w    #SprCol,$dff180
  503.            Move.w    #SprCol,$dff182
  504.            Move.w    #SprCol,$dff184
  505.            Move.w    #SprCol,$dff186
  506.            Move.w    #SprCol,$dff188
  507.            Move.w    #SprCol,$dff18a
  508.            Move.w    #SprCol,$dff18c
  509.            Move.w    #SprCol,$dff18e
  510.            Move.w    #SprCol,$dff190
  511.            Move.w    #SprCol,$dff192
  512.            Move.w    #SprCol,$dff194
  513.            Move.w    #SprCol,$dff196
  514.            Move.w    #SprCol,$dff198
  515.            Move.w    #SprCol,$dff19a
  516.            Move.w    #SprCol,$dff19c
  517.            Move.w    #SprCol,$dff19e
  518. ;;;
  519. ;;; "                 Install Copperlist"
  520.            Move.l    CopperPtr,a0
  521.            Jsr       _InstallCopper
  522. ;;;
  523.            Rts
  524.  
  525. Fastest_Counter:
  526. ;;; "                 Add Counters"
  527. AddCounters:       Add.l     #1,Fastest_Angle
  528.            And.l     #1023,Fastest_Angle
  529.  
  530.            Add.l      #1024,Fastest_XOff
  531.            Add.l      #1024,Fastest_YOff
  532.  
  533.            Add.l     #4,Zoom
  534.            And.l     #1023,Zoom
  535.  
  536.            Lea       _Sin1024,a0
  537.            Move.l    Zoom,d0
  538.            Move.w    (a0,d0*2),d3
  539.            Asl.w     #1,d3
  540.            Add.w     #512+DIST,d3
  541.            Move.w    d3,Fastest_Zoom
  542. ;;;
  543.            Rts
  544.  
  545. Fastest_Main:
  546. ;;; "                 Make Adders"
  547.            Lea       _Sin1024,a0
  548.            Moveq     #0,d7
  549.  
  550.            Move.w    Fastest_Zoom,d3
  551.  
  552.            Move.l    Fastest_Angle,d0
  553.            And.l     #1023,d0
  554.            Move.w    (a0,d0*2),d1
  555.            Muls.w    d3,d1
  556.            Asr.l     #8,d1
  557.            Addx.l    d7,d1
  558.  
  559.            Add.l     #256,d0
  560.            And.l     #1023,d0
  561.            Move.w    (a0,d0*2),d2
  562.            Muls.w    d3,d2
  563.            Asr.l     #8,d2
  564.            Addx.l    d7,d2
  565.  
  566.            Move.l    d2,Yadd1
  567.            Move.l    d1,Yadd2
  568.            Move.l    d1,Xadd1
  569.            Neg.l     d2
  570.            Move.l    d2,Xadd2
  571. ;;;
  572. ;;; "                 Make Offset Table"
  573.            Moveq     #0,d6
  574.  
  575.            Move.l    Yadd1,a4
  576.            Move.l    Yadd2,a5
  577.  
  578.            Lea       PlotLop,a0
  579.            Lea       OffsetTable,a2
  580.  
  581.            Moveq     #0,d2
  582.            Moveq     #0,d1
  583.            Moveq     #0,d0
  584.            Move.l    #16-1,d7
  585.  
  586. MakeTable:         Sub.l     a4,d1
  587.            Sub.l     a5,d2
  588.  
  589.            Move.l    d1,d0
  590.            Asr.l     #8,d0
  591.            Addx.l    d6,d0
  592.            Asl.l     #8,d0
  593.  
  594.            Move.l    d2,d3
  595.            Asr.l     #8,d3
  596.            Addx.l    d6,d0
  597.            Move.b    d3,d0
  598.            Asl.w     #1,d0               ;Words...
  599.            Move.l    (a2)+,d5            ;Get inst. offset
  600.            Move.w    d0,(a0,d5)          ;Poke instruction
  601.  
  602.            Dbra      d7,MakeTable
  603. ;;;
  604. ;;; "                 Make Offset Table (16 Steps)"
  605.            Moveq     #0,d6
  606.  
  607.            Move.l    Yadd1,d0
  608.            Asl.l     #4,d0
  609.            Move.l    d0,a4
  610.            Move.l    Yadd2,d0
  611.            ;Asl.l     #4,d0
  612.            Move.l    d0,a5
  613.  
  614.            Lea       TempTable,a0
  615.  
  616.            Moveq     #0,d2
  617.            Moveq     #0,d1
  618.            Moveq     #0,d0
  619.            Move.l    #16-1,d7
  620.  
  621. MakeTable16:       Add.l     a4,d1
  622.            Add.l     a5,d2
  623.  
  624.            Move.l    d1,d0
  625.            Asr.l     #8,d0
  626.            Addx.l    d6,d0
  627.            Asl.l     #8,d0
  628.  
  629.            Move.l    d2,d3
  630.            Asr.l     #4,d3
  631.            Addx.l    d6,d0
  632.            Move.b    d3,d0
  633.  
  634.            Asl.w     #1,d0               ;Words...
  635.            Move.w    d0,(a0)+            ;Poke instruction
  636.  
  637.            Dbra      d7,MakeTable16
  638. ;;;
  639. ;;; "                 Calculate Starting point"
  640.            Lea       _Sin1024,a0
  641.            Moveq     #0,d7
  642.  
  643.            Move.w    Fastest_Zoom,d3
  644.  
  645.            Move.l    Fastest_XOff,d4
  646.            Move.l    Fastest_YOff,d5
  647.  
  648.            ;--------------------------
  649.  
  650.            Move.l    Fastest_Angle,d0
  651.            Add.l     #256,d0
  652.            And.l     #1023,d0
  653.            Move.w    (a0,d0*2),d1
  654.            Muls.w    d3,d1
  655.            Muls.l    #-160/2,d1
  656.  
  657.            Sub.l     #256,d0
  658.            And.l     #1023,d0
  659.            Move.w    (a0,d0*2),d2
  660.            Muls.w    d3,d2
  661.            Muls.l    #-128/2,d2
  662.  
  663.            Add.l     d2,d1
  664.            Asr.l     #8,d1
  665.            Addx.l    d7,d1
  666.            Add.l     d4,d1
  667.            Move.l    d1,XStart
  668.  
  669.            ;--------------------------
  670.  
  671.            Move.l    Fastest_Angle,d0
  672.            Add.l     #0,d0
  673.            And.l     #1023,d0
  674.            Move.w    (a0,d0*2),d1
  675.            Muls.w    d3,d1
  676.            Muls.l    #-160/2,d1
  677.  
  678.            Add.l     #256,d0
  679.            And.l     #1023,d0
  680.            Move.w    (a0,d0*2),d2
  681.            Muls.w    d3,d2
  682.            Muls.l    #-128/2,d2
  683.  
  684.            Sub.l     d2,d1
  685.            Asr.l     #8,d1
  686.            Addx.l    d7,d1
  687.            Add.l     d5,d1
  688.            Move.l    d1,YStart
  689. ;;;
  690. ;;; "                 Clear Cache"
  691.            Move.l    _ExecBase,a6
  692.            Jsr       _LVOCacheClearU(a6)
  693.            Nop
  694. ;;;
  695. ;;; "                 Plot"
  696.            Move.l    ScrPtr1,a2
  697.            Move.l    ScrPtr2,a3
  698.  
  699.            Move.l    XStart,XCurr1
  700.            Move.l    YStart,XCurr2
  701.  
  702.            Move.l    #128-1,YCount
  703. YLine:
  704.            Move.l    Xadd2,d1
  705.            Add.l     d1,XCurr2
  706.            Move.l    Xadd1,d1
  707.            Add.l     d1,XCurr1
  708.  
  709.            Moveq     #0,d6
  710.            Move.l    XCurr1,d1
  711.            Asr.l     #8,d1
  712.            Addx.l    d6,d1
  713.            Asl.l     #8,d1
  714.  
  715.            Move.l    XCurr2,d0
  716.            Asr.l     #8,d0
  717.            Addx.l    d6,d0
  718.            Move.b    d0,d1
  719.            Asl.w     #1,d1               ;Words...
  720.            Move.w    d1,d6
  721.  
  722.            Move.l    TexturePtr1,a4
  723.            Add.l     #256*256,a4
  724.            Move.l    TexturePtr2,a5
  725.            Add.l     #256*256,a5
  726.  
  727.            Lea       TempTable,a6
  728.  
  729.            Move.l    #%00110011001100110011001100110011,d4
  730.            Move.l    #%11001100110011001100110011001100,d5
  731.  
  732.            Move.l    #160/16-1,d7
  733.  
  734. XLine:             Move.w    (a6)+,d0
  735.            Add.w     d6,d0
  736.  
  737.            Move.l    a4,a0
  738.            Add.w     d0,a0
  739.            Move.l    a5,a1
  740.            Add.w     d0,a1
  741.  
  742. PlotLop:           Move.w    2(a0),d3
  743.            Or.w      2(a1),d3
  744.            Move.b    2(a0),d3
  745.            Or.b      2(a1),d3
  746.            Swap      d3
  747.            Move.w    2(a0),d3
  748.            Or.w      2(a1),d3
  749.            Move.b    2(a0),d3
  750.            Or.b      2(a1),d3
  751.  
  752.            Move.w    2(a0),d2
  753.            Or.w      2(a1),d2
  754.            Move.b    2(a0),d2
  755.            Or.b      2(a1),d2
  756.            Swap      d2
  757.            Move.w    2(a0),d2
  758.            Or.w      2(a1),d2
  759.            Move.b    2(a0),d2
  760.            Or.b      2(a1),d2
  761.  
  762.            ;- - - - - - - - - - - - -
  763.  
  764.            Move.l    d2,d1
  765.            Move.l    d3,d0
  766.  
  767.            And.l     d4,d2
  768.            And.l     d5,d1
  769.            And.l     d4,d3
  770.            And.l     d5,d0
  771.  
  772.            Lsl.l     #2,d2
  773.            Lsr.l     #2,d0
  774.  
  775.            Or.l      d3,d2
  776.            Or.l      d0,d1
  777.            Move.l    d2,(a2)+
  778.            Move.l    d1,(a3)+
  779.  
  780.            Dbra      d7,XLine
  781.  
  782.            Subq.l    #1,YCount
  783.            Bge       YLine
  784. ;;;
  785. ;;; "                 Screen Swap"
  786.            Move.l    ScrPtr1,d0
  787.            Move.l    ViewPtr1,ScrPtr1
  788.            Move.l    d0,ViewPtr1
  789.  
  790.            Move.l    ScrPtr2,d0
  791.            Move.l    ViewPtr2,ScrPtr2
  792.            Move.l    d0,ViewPtr2
  793.  
  794.            ;--------------------------
  795.  
  796.            Move.l    BplPtr,a0
  797.            Move.l    ViewPtr1,d1
  798.            Moveq     #0,d2
  799.            Move.l    #0,d0
  800.            Jsr       _SetPtrs
  801.  
  802.            Move.l    BplPtr,a0
  803.            Lea       8(a0),a0
  804.            Move.l    ViewPtr1,d1
  805.            Moveq     #0,d2
  806.            Move.l    #0,d0
  807.            Jsr       _SetPtrs
  808.  
  809.            Move.l    BplPtr,a0
  810.            Lea       16(a0),a0
  811.            Move.l    ViewPtr2,d1
  812.            Moveq     #0,d2
  813.            Move.l    #0,d0
  814.            Jsr       _SetPtrs
  815.  
  816.            Move.l    BplPtr,a0
  817.            Lea       24(a0),a0
  818.            Move.l    ViewPtr2,d1
  819.            Moveq     #0,d2
  820.            Move.l    #0,d0
  821.            Jsr       _SetPtrs
  822. ;;;
  823.            Rts
  824.  
  825. Fastest_Remove:
  826. ;;; "                 Free Memory"
  827. CloseScreen:       Move.l    #Fastest_ID,d0
  828.            Jsr       _FreeMany
  829. ;;;
  830.            Rts
  831.  
  832. ***************************************
  833. *                Data...              *
  834. ***************************************
  835.  
  836. ;;; "Variables / Tables"
  837.            Cnop      0,8
  838.  
  839. Int1:              Dc.l      0
  840.  
  841. Temp1:             Dc.l      0
  842. Temp2:             Dc.l      0
  843. Temp3:             Dc.l      0
  844. Temp4:             Dc.l      0
  845.  
  846. YCount:            Dc.l      0
  847.  
  848. Even:              Dc.l      0
  849. Yadd1:             Dc.l      0
  850. Yadd2:             Dc.l      0
  851. Xadd1:             Dc.l      0
  852. Xadd2:             Dc.l      0
  853.  
  854. XCurr1:            Dc.l      0
  855. XCurr2:            Dc.l      0
  856. Begin1:            Dc.l      0
  857. Begin2:            Dc.l      0
  858.  
  859. XStart:            Dc.l      0
  860. YStart:            Dc.l      0
  861.  
  862. Zoom:              Dc.l      0
  863.  
  864. Fastest_Angle:     Dc.l      0
  865. Fastest_Zoom:      Dc.l      0
  866. Fastest_XOff:      Dc.l      0
  867. Fastest_YOff:      Dc.l      0
  868.  
  869. ScrPtr1:           Dc.l      0
  870. ScrPtr2:           Dc.l      0
  871. ViewPtr1:          Dc.l      0
  872. ViewPtr2:          Dc.l      0
  873. Plane5Ptr:         Dc.l      0
  874.  
  875. CopperPtr:         Dc.l      0
  876. BplPtr:            Dc.l      0
  877. SprPtr:            Dc.l      0
  878.  
  879. TexturePtr1:       Dc.l      0
  880. TexturePtr2:       Dc.l      0
  881.  
  882.  
  883.  
  884. OffsetTable:       Dc.l      28,62,32,66,20,54,24,58
  885.            Dc.l      10,44,14,48, 2,36, 6,40
  886.  
  887. TempTable:         Dc.w      0,0,0,0,0,0,0,0
  888.            Dc.w      0,0,0,0,0,0,0,0
  889.  
  890. ScrambleTable2:    Dc.l      9,1,8,0,11,3,10,2
  891.            Dc.l      13,5,12,4,15,7,14,6
  892. ;;;
  893.  
  894.            Section   data,DATA
  895. ;;; "Texture"
  896.            Cnop      0,8
  897. Texture:           Incbin    "!intro:fastest/textures/atomic.4bit"
  898. ;;;
  899.  
  900.